Chod hore
Predchádzajúca stránka Nasledujúca stránka Začiatok kapitoly Koniec kapitoly Začiatok kurzu Koniec kurzu


15. MNOŽINA


Množina (set) je taká dátová štruktúra, ktorá obsahuje prvky rovnakého typu, ale bez usporiadania. Tento objekt je špecifickým pre Turbo Pascal, pomocou neho sa dá veľmi efektívne a elegantne riešiť niektoré problémy.

Pri deklarácií množiny vychádzame vždy zo základného priestoru. Základný priestor v Pascale je vždy objekt ordinárneho typu, napr.

20..40
'0', '9 '
Char
Byte

Množinu tvoríme z prvkov takéhoto základného priestoru. Žiaľ v Turbo Pascale počet prvkov v základnom priestore môže byť maximálne iba 256 a teda aj ich poradové čísla budú len od 0 po 255.

Deklarácia množiny: Set Of ZákladnýPriestor

Napríklad:

Var 
 H1 : Set Of 20..40 ;
 H2 : Set Of '0', '9'
 H3 : Set Of Char
 H4 : Set Of Byte


Premenné H1, H2, H3 a H4 sú typu množina.

Množiny v Pascale môžeme zadať aj tak, že jeho prvky uvedieme v hranatej zátvorke. Tento spôsob zadania množiny sa nazýva konštruktorom množiny. Prvkami môžu byť výrazy základného priestoru a teda v konštruktore množiny môžu byť aj premenné. Prvky nemusíme uvádzať usporiadane, ale ak to urobíme usporiadane - zápis bude prehľadnejším. Napr.:

[20..30] 
[4,6,7] 
[1..5,9,12,20..26] 
['1'.. '3', '9'] 
[I,I*10,I+2] 
[]{ prázdna množina }

Množinová konštanta je taký konštruktor množiny, ktorý obsahuje iba konštanty. Vo vyššie uvedených príkladoch až na príklad [I,I*10,I+2] sú všetky také.

V operáciách s množinami na oboch stranách znaku operácie sú množiny a výsledkom je tiež množina:

Zjednotenie+
Prienik*
Rozdiel-

Var 
 H1, H2 : Set Of Byte ;
... 
H1 := [1,2,6] ; 
H2 := [1,4..7] ; 

Potom

H1+H2 = [1,2,4..7] 
H1*H2 = [1,6] 
H1-H2 = [2] 

Môžeme množiny porovnávať. Na oboch stranách porovnávania sú množiny a výsledok je typu Boolean:

Identita=
Nerovnosť:<>
Podmnožina:<=
Nadmnožina:>=

Porovnávanie predchádzajúcich množín:

H1 = [1,2,6]pravda
H2 = [1,4,5,6,7]pravda
H1 <> H2pravda
H1 >= H2nepravda
H1 <= H2nepravda

Naľavo od operácie čí je niečo prvkom (IN) danej množiny je prvok a napravo množina.
Výsledkom je logická hodnota:

If 2 In H1 Then ...{ pravda }
If 2 In H1*H2 Then ...{ nepravda }

Nasledujúce podmienky sú po dvojiciach rovnaké:

C In ['C', 'E', 'I', 'S']
(C='C') Or (C='E') Or (C='I') Or (C='S')

C In ['0'..'9']
(C>='0') And (C<='9')


Negácia je Not(Prvok In Množina)
Zápis "Prvok Not In Množina" je logickejší, ale pre prekladač neznámy a teda syntakticky nesprávny.
Priority operácií:

  • Najvyššiu prioritu má prienik (*),
  • potom idú zjednotenie a rozdiel (+, -),
  • potom porovnávania (=, <>, <=, >=) a
  • najnižšiu prioritu má kontrola byť prvkom (In).


V priradení vľavo je premenná typu množina a vpravo výraz typu množina. Činiteľmi sú konštruktory množiny resp. premenné typu množina a operáciami sú vyššie uvedené operácie s množinami, napr.:

Obr15_1


Množinu nemôžeme pomocou Write vypísať.

Úloha
Zadávajme z klávesnice znaky, kým nestlačíme ESC. Potom zobrazme v abecednom poradí znaky, ktoré boli zadané a potom tie, ktoré neboli. Každé písmeno vypíšme iba raz a nerozlišujme veľké a malé písmená!


V tejto úlohe máme pozbierať v podstate veľké písmená. Teda základným priestorom budú všetky veľké písmená: 'A'..'Z'. Zdrojový program bude nasledujúci:

Obr15_2